﻿<cfscript>
/** 
* Senate Frameworks timeTableProperty
* 
* @hint "The time table property object handler." 
*/ 

component 
	displayname="public.service.handler.timeTableProperty" 
	output=false 
	accessors=true 
	{
		
	/* PROPERTIES */
	property type="boolean" name="ProgramTask" default="true" hint="是否用于计划课程";
	property type="boolean" name="CommonTask" default="true" hint="是否用于全校通选课";

	property type="boolean" name="HalfExam" default="true" hint="是否用于半期排考";
	property type="boolean" name="FinalExam" default="true" hint="是否用于期末集中排考";
	property type="boolean" name="DisperseExam" default="true" hint="是否用于自主分散考试安排";
	property type="boolean" name="ResitExam" default="true" hint="是否用于补考安排";

	property type="boolean" name="OpenTask" default="true" hint="是否用于单开班课程";
	property type="boolean" name="SportTask" default="true" hint="是否用于体育项目课";

	/**
	* @hint "初始化对象"
	* 
	* @ProgramTask "是否用于计划课程"
	* @CommonTask "是否用于全校通选课"
	* @HalfExam "是否用于半期排考"
	* @FinalExam "是否用于期末集中排考"
	* @DisperseExam "是否用于自主分散考试安排"
	* @ResitExam "是否用于补考安排"
	* @OpenTask "是否用于单开班课程"
	* @SportTask "是否用于体育项目课程"
	*/
	public public.service.handler.timeTableProperty function init( boolean ProgramTask=true, boolean CommonTask=true, 
																	boolean HalfExam=true, boolean FinalExam=true, boolean DisperseExam=true, boolean ResitExam=true, 
																	boolean OpenTask=true, 
																	boolean SportTask=true ) output=false {
		
		setProgramTask( arguments.ProgramTask );
		setCommonTask( arguments.CommonTask );

		setHalfExam( arguments.HalfExam );
		setFinalExam( arguments.FinalExam );
		setDisperseExam( arguments.DisperseExam );
		setResitExam( arguments.ResitExam );

		setOpenTask( arguments.OpenTask );
		setSportTask( arguments.SportTask );
		
		return this;
	}

	/**
	* @hint "将上述属性转换为属性字符串"
	*/
	public string function stringProperty() output=false {
		
		var prop = "";
		
		/* 执行序列化 */
		if (getProgramTask()) { prop = prop & "1"; } else { prop = prop & "0"; }
		if (getCommonTask()) { prop = prop & "1"; } else { prop = prop & "0"; }

		if (getHalfExam()) { prop = prop & "1"; } else { prop = prop & "0"; }
		if (getFinalExam()) { prop = prop & "1"; } else { prop = prop & "0"; }
		if (getDisperseExam()) { prop = prop & "1"; } else { prop = prop & "0"; }
		if (getResitExam()) { prop = prop & "1"; } else { prop = prop & "0"; }

		if (getOpenTask()) { prop = prop & "1"; } else { prop = prop & "0"; }
		if (getSportTask()) { prop = prop & "1"; } else { prop = prop & "0"; }

		return left(prop & "0000000000", 10);
		
		return prop;
	}

	/**
	* @hint "将属性字符串转换为对象属性"
	* 
	* @fString "属性字符串"
	*/
	public void function parseProperty( required string fString ) output=false {
		
		var i = 0;
		
		for (i=1; i <= len(arguments.fString); i++) {
			
			switch (i) {
				
				case 1:
					/* 第1位 是否用于计划课程 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setProgramTask(true); } else { setProgramTask(false); }
					break;

				case 2:
					/* 第2位 是否用于全校通选课 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setCommonTask(true); } else { setCommonTask(false); }
					break;


				case 3:
					/* 第3位 是否用于半期排考 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setHalfExam(true); } else { setHalfExam(false); }
					break;
					
				case 4:
					/* 第4位 是否用于期末集中排考 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setFinalExam(true); } else { setFinalExam(false); }
					break;
				
				case 5:
					/* 第5位 是否用于自主分散考试安排 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setDisperseExam(true); } else { setDisperseExam(false); }
					break;

				case 6:
					/* 第6位 是否用于补考安排 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setResitExam(true); } else { setResitExam(false); }
					break;
					
				case 7:
					/* 第7位 是否用于单开班课程 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setOpenTask(true); } else { setOpenTask(false); }
					break;	
				
				case 8:
					/* 第8位 是否用于体育项目课 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setSportTask(true); } else { setSportTask(false); }
					break;
			
			}
			
		}
		
	}	
}

</cfscript>